There exist multi-core systems that can balance network traffic across one or more cores in the multi-core system. These multi-core systems can be included within an appliance or a computing system and can comprise any number of cores, or processors. In some embodiments, multi-core systems distribute network traffic according to flow distribution models such as functional parallelism, where each core in a multi-core system is assigned to a different function, or data parallelism where each core in a multi-core system is assigned to a different device or module. These distribution schemes do not take into account the amount of network traffic, therefore the distribution of network traffic is often not even or symmetrical. Thus, there exists a need for a distribution scheme that substantially symmetrically and evenly distributes network traffic amongst one or more cores in a multi-core system.
In some instances, distribution of network traffic across one or more cores requires changing an attribute of the network traffic to ensure that return traffic is routed to the originating core. Ensuring symmetry with regard to the core where a request is transmitted from and the core where the response is received, reduces unnecessary copying and caching of packet data, and provides an even flow of requests and responses to and from the multi-core system. Some systems achieve symmetrical distribution by changing tuples associated with data packets in the network traffic. The change made to the tuple can be a modification of a source IP address and/or a source port. In some instances, a backend system may require that the source IP address and/or source port remain un-modified. In those instances, systems are needed that both maintain these data packet attributes, and ensure that requests and responses are handled by substantially the same core in the multi-core system.
Data packets included within network traffic distributed amongst the cores in a multi-core system are sometimes fragmented. In these instances, the multi-core system receives data packet fragments rather than a whole data packet. Systems are therefore needed that both handle data packet fragments and evenly and symmetrically distribute network traffic across the cores of a multi-core system.